package com.amumu.drama.common.modules.service.impl.payment;

import com.amumu.drama.common.constant.PayTypeEnum;
import com.amumu.drama.common.constant.SourceTypeEnum;
import com.amumu.drama.common.modules.order.dto.OmsOrderDetail;
import com.amumu.drama.model.OmsOrder;
import com.amumu.drama.model.UmsMember;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.URL;

import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.Map;

@Data
public class PaymentReq {

    // ========== 订单相关字段 ==========
    @ApiModelProperty("订单ID")
    private Long orderId;

    @ApiModelProperty("订单金额")
    private BigDecimal payAmount;

    @ApiModelProperty("支付类型")
    private PayTypeEnum payTypeEnum;

    @ApiModelProperty("订单来源类型")
    private SourceTypeEnum sourceTypeEnum;

    // ========== 支付退款相关字段 ==========
    /**
     * 商品标题
     */
    @NotEmpty(message = "商品标题不能为空")
    @Length(max = 32, message = "商品标题不能超过 32")
    private String subject;
    /**
     * 商品描述信息
     */
    @Length(max = 128, message = "商品描述信息长度不能超过128")
    private String body;
    /**
     * 支付结果的 notify 回调地址
     */
    @NotEmpty(message = "支付结果的回调地址不能为空")
    @URL(message = "支付结果的 notify 回调地址必须是 URL 格式")
    private String notifyUrl;

    @NotEmpty(message = "退款结果的回调地址不能为空")
    @URL(message = "退款结果的 notify 回调地址必须是 URL 格式")
    private String refundNotifyUrl;
    /**
     * 支付结果的 return 回调地址
     */
    @URL(message = "前端支付后的回调地址")
    private String returnUrl;


    // ========== 拓展参数 ==========
    /**
     * 支付渠道的额外参数
     * <p>
     * 例如说，微信公众号需要传递 openid 参数
     */
    @ApiModelProperty("用户IP")
    private String ip;
    private Map<String, String> channelExtras;
    @ApiModelProperty("退款原因")
    private String refundReason;
    @ApiModelProperty("微信支付的支付ID")
    private String openId;

    /**
     * 暂时冗余实体
     */
    private UmsMember umsMember;
    private OmsOrderDetail orderDetail;
    private OmsOrder omsOrder;
}
